/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.acionista.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author joao
 */
@Entity
@Table(name = "cliente", catalog = "acionista", schema = "dbo")
@NamedQueries({
    @NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c")})
public class Cliente implements Serializable, Comparable<Cliente> {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_cliente", nullable = false)
    private Integer idCliente;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 1)
    @Column(name = "tip_cliente", nullable = false, length = 1)
    private String tipCliente;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 60)
    @Column(name = "nom_cliente", nullable = false, length = 60)
    private String nomCliente;
    @Size(max = 40)
    @Column(name = "nom_proprietario", length = 40)
    private String nomProprietario;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 30)
    @Column(name = "num_cpf", nullable = false, length = 30)
    private String numCpf;
    @Column(name = "dat_nasc_abert")
    @Temporal(TemporalType.DATE)
    private Date datNascAbert;
    @Size(max = 200)
    @Column(name = "dsc_email", length = 200)
    private String dscEmail;
    @Size(max = 200)
    @Column(name = "dsc_site", length = 200)
    private String dscSite;
    @Lob
    @Column(name = "dsc_obs")
    private String dscObs;
    @Lob
    @Column(name = "dsc_historico")
    private String dscHistorico;
    @Size(max = 1)
    @Column(name = "tip_civil", length = 1)
    private String tipCivil;
    @Size(max = 1)
    @Column(name = "tip_sexo", length = 1)
    private String tipSexo;
    @Column(name = "id_procurador")
    private Integer idProcurador;
    @Column(name = "qde_acao")
    private BigDecimal qdeAcao;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "perc_partic", precision = 18, scale = 4)
    private BigDecimal percPartic;
    @Size(max = 10)
    @Column(name = "num_folha", length = 10)
    private String numFolha;
    @Column(name = "dat_saldo_anterior")
    @Temporal(TemporalType.DATE)
    private Date datSaldoAnterior;
    @Column(name = "saldo_anterior")
    private BigDecimal saldoAnterior;
    @Column(name = "id_anotacao_saldo_inicial")
    private Integer idAnotacaoSaldoInicial;
    @Column(name = "id_anotacao_saldo_atual")
    private Integer idAnotacaoSaldoAtual;
    @Size(max = 10)
    @Column(name = "num_folha_atual", length = 10)
    private String numFolhaAtual;
    @Size(max = 30)
    @Column(name = "dsc_profissao", length = 30)
    private String dscProfissao;
    @Size(max = 50)
    @Column(name = "dsc_complemento", length = 50)
    private String dscComplemento;
    @Size(max = 10)
    @Column(name = "num_endereco", length = 10)
    private String numEndereco;
    @Size(max = 20)
    @Column(name = "num_outro", length = 20)
    private String numOutro;
    @Size(max = 20)
    @Column(name = "num_telefone", length = 20)
    private String numTelefone;
    @Column(name = "impresso")
    private Integer impresso;
    @Transient
    @Column(name = "qdeReceb", precision = 18, scale = 0)
    private BigDecimal qdeReceb;
    @Transient
    @Column(name = "qdePerc", precision = 18, scale = 4)
    private BigDecimal qdePerc;
    @Transient
    @Column(name = "qdeVlr", precision = 18, scale = 2)
    private BigDecimal qdeVlr;
    @Transient
    @Column(name = "qdeFinal", precision = 18, scale = 0)
    private BigDecimal qdeFinal;
    @Transient
    @Column(name = "qdeProposta", precision = 18, scale = 0)
    private BigDecimal qdeProposta;
    @Transient
    @Column(name = "qdePercProposta", precision = 18, scale = 0)
    private BigDecimal qdePercProposta;
    @Transient
    @Column(name = "qdeVlrProposta", precision = 18, scale = 2)
    private BigDecimal qdeVlrProposta;
    @Transient
    @Column(name = "qdePercFinal", precision = 18, scale = 4)
    private BigDecimal qdePercFinal;
    @Transient
    @Column(name = "qdeVlrFinal", precision = 18, scale = 2)
    private BigDecimal qdeVlrFinal;
    @Transient
    private String dscTipo;
    @JoinColumn(name = "id_nacionalidade", referencedColumnName = "id_nacionalidade")
    @ManyToOne
    private Nacionalidade idNacionalidade;
    @JoinColumn(name = "id_livro", referencedColumnName = "id_livro")
    @ManyToOne
    private Livro idLivro;
    @JoinColumn(name = "cod_logradouro", referencedColumnName = "cod_logradouro")
    @ManyToOne
    private CepEndereco codLogradouro;

    public Cliente() {
    }

    public Cliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    public Cliente(Integer idCliente, String tipCliente, String nomCliente, String numCpf) {
        this.idCliente = idCliente;
        this.tipCliente = tipCliente;
        this.nomCliente = nomCliente;
        this.numCpf = numCpf;
    }

    public Integer getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    public String getTipCliente() {
        return tipCliente;
    }

    public void setTipCliente(String tipCliente) {
        this.tipCliente = tipCliente;
    }

    public String getNomCliente() {
        return nomCliente;
    }

    public void setNomCliente(String nomCliente) {
        this.nomCliente = nomCliente;
    }

    public String getNomProprietario() {
        return nomProprietario;
    }

    public void setNomProprietario(String nomProprietario) {
        this.nomProprietario = nomProprietario;
    }

    public String getNumCpf() {
        return numCpf;
    }

    public void setNumCpf(String numCpf) {
        this.numCpf = numCpf;
    }

    public Date getDatNascAbert() {
        return datNascAbert;
    }

    public void setDatNascAbert(Date datNascAbert) {
        this.datNascAbert = datNascAbert;
    }

    public String getDscEmail() {
        return dscEmail;
    }

    public void setDscEmail(String dscEmail) {
        this.dscEmail = dscEmail;
    }

    public String getDscSite() {
        return dscSite;
    }

    public void setDscSite(String dscSite) {
        this.dscSite = dscSite;
    }

    public String getDscObs() {
        return dscObs;
    }

    public void setDscObs(String dscObs) {
        this.dscObs = dscObs;
    }

    public String getDscHistorico() {
        return dscHistorico;
    }

    public void setDscHistorico(String dscHistorico) {
        this.dscHistorico = dscHistorico;
    }

    public String getTipCivil() {
        return tipCivil;
    }

    public void setTipCivil(String tipCivil) {
        this.tipCivil = tipCivil;
    }

    public String getTipSexo() {
        return tipSexo;
    }

    public void setTipSexo(String tipSexo) {
        this.tipSexo = tipSexo;
    }

    public Integer getIdProcurador() {
        return idProcurador;
    }

    public void setIdProcurador(Integer idProcurador) {
        this.idProcurador = idProcurador;
    }

    public BigDecimal getQdeAcao() {
        return qdeAcao;
    }

    public void setQdeAcao(BigDecimal qdeAcao) {
        this.qdeAcao = qdeAcao;
    }

    public BigDecimal getPercPartic() {
        return percPartic;
    }

    public void setPercPartic(BigDecimal percPartic) {
        this.percPartic = percPartic;
    }

    public String getNumFolha() {
        return numFolha;
    }

    public void setNumFolha(String numFolha) {
        this.numFolha = numFolha;
    }

    public Date getDatSaldoAnterior() {
        return datSaldoAnterior;
    }

    public void setDatSaldoAnterior(Date datSaldoAnterior) {
        this.datSaldoAnterior = datSaldoAnterior;
    }

    public BigDecimal getSaldoAnterior() {
        return saldoAnterior;
    }

    public void setSaldoAnterior(BigDecimal saldoAnterior) {
        this.saldoAnterior = saldoAnterior;
    }

    public Integer getIdAnotacaoSaldoInicial() {
        return idAnotacaoSaldoInicial;
    }

    public void setIdAnotacaoSaldoInicial(Integer idAnotacaoSaldoInicial) {
        this.idAnotacaoSaldoInicial = idAnotacaoSaldoInicial;
    }

    public Integer getIdAnotacaoSaldoAtual() {
        return idAnotacaoSaldoAtual;
    }

    public void setIdAnotacaoSaldoAtual(Integer idAnotacaoSaldoAtual) {
        this.idAnotacaoSaldoAtual = idAnotacaoSaldoAtual;
    }

    public String getNumFolhaAtual() {
        return numFolhaAtual;
    }

    public void setNumFolhaAtual(String numFolhaAtual) {
        this.numFolhaAtual = numFolhaAtual;
    }

    public String getDscProfissao() {
        return dscProfissao;
    }

    public void setDscProfissao(String dscProfissao) {
        this.dscProfissao = dscProfissao;
    }

    public String getDscComplemento() {
        return dscComplemento;
    }

    public void setDscComplemento(String dscComplemento) {
        this.dscComplemento = dscComplemento;
    }

    public String getNumEndereco() {
        return numEndereco;
    }

    public void setNumEndereco(String numEndereco) {
        this.numEndereco = numEndereco;
    }

    public String getNumOutro() {
        return numOutro;
    }

    public void setNumOutro(String numOutro) {
        this.numOutro = numOutro;
    }

    public String getNumTelefone() {
        return numTelefone;
    }

    public void setNumTelefone(String numTelefone) {
        this.numTelefone = numTelefone;
    }

    public Nacionalidade getIdNacionalidade() {
        return idNacionalidade;
    }

    public void setIdNacionalidade(Nacionalidade idNacionalidade) {
        this.idNacionalidade = idNacionalidade;
    }

    public Livro getIdLivro() {
        return idLivro;
    }

    public void setIdLivro(Livro idLivro) {
        this.idLivro = idLivro;
    }

    public CepEndereco getCodLogradouro() {
        return codLogradouro;
    }

    public void setCodLogradouro(CepEndereco codLogradouro) {
        this.codLogradouro = codLogradouro;
    }

    public String getDscTipo() {
        if (this.tipCliente != null) {
            if (this.tipCliente.equals("F")) {
                this.dscTipo = "Física";
            } else {
                this.dscTipo = "Jurídica";
            }
        }
        return dscTipo;
    }

    public void setDscTipo(String dscTipo) {
        this.dscTipo = dscTipo;
    }

    public BigDecimal getQdeFinal() {
        return qdeFinal;
    }

    public void setQdeFinal(BigDecimal qdeFinal) {
        this.qdeFinal = qdeFinal;
    }

    public BigDecimal getQdePerc() {
        return qdePerc;
    }

    public void setQdePerc(BigDecimal qdePerc) {
        this.qdePerc = qdePerc;
    }

    public BigDecimal getQdePercFinal() {
        return qdePercFinal;
    }

    public void setQdePercFinal(BigDecimal qdePercFinal) {
        this.qdePercFinal = qdePercFinal;
    }

    public BigDecimal getQdeReceb() {
        return qdeReceb;
    }

    public void setQdeReceb(BigDecimal qdeReceb) {
        this.qdeReceb = qdeReceb;
    }

    public BigDecimal getQdeVlr() {
        return qdeVlr;
    }

    public void setQdeVlr(BigDecimal qdeVlr) {
        this.qdeVlr = qdeVlr;
    }

    public BigDecimal getQdeVlrFinal() {
        return qdeVlrFinal;
    }

    public void setQdeVlrFinal(BigDecimal qdeVlrFinal) {
        this.qdeVlrFinal = qdeVlrFinal;
    }

    public BigDecimal getQdeProposta() {
        return qdeProposta;
    }

    public void setQdeProposta(BigDecimal qdeProposta) {
        this.qdeProposta = qdeProposta;
    }

    public BigDecimal getQdePercProposta() {
        return qdePercProposta;
    }

    public void setQdePercProposta(BigDecimal qdePercProposta) {
        this.qdePercProposta = qdePercProposta;
    }

    public BigDecimal getQdeVlrProposta() {
        return qdeVlrProposta;
    }

    public void setQdeVlrProposta(BigDecimal qdeVlrProposta) {
        this.qdeVlrProposta = qdeVlrProposta;
    }

    public Integer getImpresso() {
        return impresso;
    }

    public void setImpresso(Integer impresso) {
        this.impresso = impresso;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idCliente != null ? idCliente.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cliente)) {
            return false;
        }
        Cliente other = (Cliente) object;
        if ((this.idCliente == null && other.idCliente != null) || (this.idCliente != null && !this.idCliente.equals(other.idCliente))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.jm.acionista.entity.Cliente[ idCliente=" + idCliente + " ]";
    }

    @Override
    public int compareTo(Cliente o) {
        return this.getQdeFinal().compareTo(o.getQdeFinal());
    }
}
